<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="generator" content="Docutils 0.4: http://docutils.sourceforge.net/" />
<title>ftputil</title>
<style type="text/css">

/*
:Author: David Goodger
:Contact: goodger@users.sourceforge.net
:Date: $Date: 2005-05-26 12:51:39 +0200 (Thu, 26 May 2005) $
:Version: $Revision: 3368 $
:Copyright: This stylesheet has been placed in the public domain.

Default cascading style sheet for the HTML output of Docutils.
*/

/* "! important" is used here to override other ``margin-top`` and
   ``margin-bottom`` styles that are later in the stylesheet or 
   more specific.  See http://www.w3.org/TR/CSS1#the-cascade */
.first {
  margin-top: 0 ! important }

.last, .with-subtitle {
  margin-bottom: 0 ! important }

.hidden {
  display: none }

a.toc-backref {
  text-decoration: none ;
  color: black }

blockquote.epigraph {
  margin: 2em 5em ; }

dl.docutils dd {
  margin-bottom: 0.5em }

/* Uncomment (and remove this text!) to get bold-faced definition list terms
dl.docutils dt {
  font-weight: bold }
*/

div.abstract {
  margin: 2em 5em }

div.abstract p.topic-title {
  font-weight: bold ;
  text-align: center }

div.admonition, div.attention, div.caution, div.danger, div.error,
div.hint, div.important, div.note, div.tip, div.warning {
  margin: 2em ;
  border: medium outset ;
  padding: 1em }

div.admonition p.admonition-title, div.hint p.admonition-title,
div.important p.admonition-title, div.note p.admonition-title,
div.tip p.admonition-title {
  font-weight: bold ;
  font-family: sans-serif }

div.attention p.admonition-title, div.caution p.admonition-title,
div.danger p.admonition-title, div.error p.admonition-title,
div.warning p.admonition-title {
  color: red ;
  font-weight: bold ;
  font-family: sans-serif }

/* Uncomment (and remove this text!) to get reduced vertical space in
   compound paragraphs.
div.compound .compound-first, div.compound .compound-middle {
  margin-bottom: 0.5em }

div.compound .compound-last, div.compound .compound-middle {
  margin-top: 0.5em }
*/

div.dedication {
  margin: 2em 5em ;
  text-align: center ;
  font-style: italic }

div.dedication p.topic-title {
  font-weight: bold ;
  font-style: normal }

div.figure {
  margin-left: 2em }

div.footer, div.header {
  font-size: smaller }

div.line-block {
  display: block ;
  margin-top: 1em ;
  margin-bottom: 1em }

div.line-block div.line-block {
  margin-top: 0 ;
  margin-bottom: 0 ;
  margin-left: 1.5em }

div.sidebar {
  margin-left: 1em ;
  border: medium outset ;
  padding: 1em ;
  background-color: #ffffee ;
  width: 40% ;
  float: right ;
  clear: right }

div.sidebar p.rubric {
  font-family: sans-serif ;
  font-size: medium }

div.system-messages {
  margin: 5em }

div.system-messages h1 {
  color: red }

div.system-message {
  border: medium outset ;
  padding: 1em }

div.system-message p.system-message-title {
  color: red ;
  font-weight: bold }

div.topic {
  margin: 2em }

h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
  margin-top: 0.4em }

h1.title {
  text-align: center }

h2.subtitle {
  text-align: center }

hr.docutils {
  width: 75% }

ol.simple, ul.simple {
  margin-bottom: 1em }

ol.arabic {
  list-style: decimal }

ol.loweralpha {
  list-style: lower-alpha }

ol.upperalpha {
  list-style: upper-alpha }

ol.lowerroman {
  list-style: lower-roman }

ol.upperroman {
  list-style: upper-roman }

p.attribution {
  text-align: right ;
  margin-left: 50% }

p.caption {
  font-style: italic }

p.credits {
  font-style: italic ;
  font-size: smaller }

p.label {
  white-space: nowrap }

p.rubric {
  font-weight: bold ;
  font-size: larger ;
  color: maroon ;
  text-align: center }

p.sidebar-title {
  font-family: sans-serif ;
  font-weight: bold ;
  font-size: larger }

p.sidebar-subtitle {
  font-family: sans-serif ;
  font-weight: bold }

p.topic-title {
  font-weight: bold }

pre.address {
  margin-bottom: 0 ;
  margin-top: 0 ;
  font-family: serif ;
  font-size: 100% }

pre.line-block {
  font-family: serif ;
  font-size: 100% }

pre.literal-block, pre.doctest-block {
  margin-left: 2em ;
  margin-right: 2em ;
  background-color: #eeeeee }

span.classifier {
  font-family: sans-serif ;
  font-style: oblique }

span.classifier-delimiter {
  font-family: sans-serif ;
  font-weight: bold }

span.interpreted {
  font-family: sans-serif }

span.option {
  white-space: nowrap }

span.pre {
  white-space: pre }

span.problematic {
  color: red }

span.section-subtitle {
  /* font-size relative to parent (<h#> element) */
  font-size: 80% }

table.citation {
  border-left: solid thin gray }

table.docinfo {
  margin: 2em 4em }

table.docutils {
  margin-top: 0.5em ;
  margin-bottom: 0.5em }

table.footnote {
  border-left: solid thin black }

table.docutils td, table.docutils th,
table.docinfo td, table.docinfo th {
  padding-left: 0.5em ;
  padding-right: 0.5em ;
  vertical-align: top }

table.docutils th.field-name, table.docinfo th.docinfo-name {
  font-weight: bold ;
  text-align: left ;
  white-space: nowrap ;
  padding-left: 0 }

h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
  font-size: 100% }

tt.docutils {
  background-color: #eeeeee }

ul.auto-toc {
  list-style-type: none }

</style>
</head>
<body>
<div class="document" id="ftputil">
<h1 class="title">ftputil</h1>
<div class="section">
<h1><a id="purpose" name="purpose">Purpose</a></h1>
<p>ftputil is a high-level FTP client library for the Python programming
language. ftputil implements a virtual file system for accessing FTP
servers, that is, it can generate file-like objects for remote files.
The library supports many functions similar to those in the os,
os.path and shutil modules. ftputil has convenience functions for
conditional uploads and downloads, and handles FTP clients and servers
in different timezones.</p>
</div>
<div class="section">
<h1><a id="what-s-new" name="what-s-new">What's new?</a></h1>
<p>From version 2.1 to 2.2, the following has changed:</p>
<ul class="simple">
<li>Results of stat calls (also indirect calls, i. e. listdir,
isdir/isfile/islink, exists, getmtime etc.) are now cached and
reused. This results in remarkable speedups for many use cases.</li>
<li>The current directory is also locally cached, resulting in further
speedups.</li>
<li>It's now possible to write and plug in custom parsers for directory
formats which ftputil doesn't support natively.</li>
<li>File-like objects generated via <tt class="docutils literal"><span class="pre">FTPHost.file</span></tt> now support the
iterator protocol (for line in some_file: ...).</li>
<li>The documentation has been updated accordingly.</li>
</ul>
<p>Possible incompatibilities:</p>
<ul class="simple">
<li>This release requires at least Python 2.3. (Previous releases
worked with Python versions from 2.1 up.)</li>
<li>The method <tt class="docutils literal"><span class="pre">FTPHost.set_directory_format</span></tt> has been removed,
since the directory format (Unix or MS) is set automatically. (The
new method <tt class="docutils literal"><span class="pre">set_parser</span></tt> is a different animal since it takes
a parser object to parse &quot;foreign&quot; formats, not a string.)</li>
</ul>
</div>
<div class="section">
<h1><a id="documentation" name="documentation">Documentation</a></h1>
<p>The documentation for ftputil can be found in the file ftputil.txt
(reStructuredText format) or ftputil.html (recommended, generated
from ftputil.txt).</p>
</div>
<div class="section">
<h1><a id="prerequisites" name="prerequisites">Prerequisites</a></h1>
<p>To use ftputil, you need Python, at least version 2.3. Python is a
programming language, available from <a class="reference" href="http://www.python.org">http://www.python.org</a> for free.</p>
</div>
<div class="section">
<h1><a id="installation" name="installation">Installation</a></h1>
<ul>
<li><p class="first"><em>If you have an older version of ftputil installed, delete it or move
it somewhere else, so that it doesn't conflict with the new version!</em></p>
</li>
<li><p class="first">Unpack the archive file containing the distribution files. If you
had an hypothetical ftputil version 1.2, you would type at the shell
prompt:</p>
<blockquote>
<p>tar xzf ftputil-1.2.tar.gz</p>
</blockquote>
<p>However, if you read this, you probably unpacked the archive already. ;-)</p>
</li>
<li><p class="first">Make the directory to where the files were unpacked your current directory.
Consider that after unpacking, you have a directory ftputil-1.2. Make it
the current directory with</p>
<blockquote>
<p>cd ftputil-1.2</p>
</blockquote>
</li>
<li><p class="first">Type</p>
<blockquote>
<p>python setup.py install</p>
</blockquote>
<p>at the shell prompt. On Unix/Linux, you have to be root to perform the
installation. Likewise, you have to be logged in as administrator if you
install on Windows.</p>
<p>If you want to customize the installation paths, please read
<a class="reference" href="http://docs.python.org/inst/inst.html">http://docs.python.org/inst/inst.html</a> .</p>
</li>
</ul>
</div>
<div class="section">
<h1><a id="license" name="license">License</a></h1>
<p>ftputil is Open Source Software. It is distributed under the
new/modified/revised BSD license (see
<a class="reference" href="http://www.opensource.org/licenses/bsd-license.html">http://www.opensource.org/licenses/bsd-license.html</a> ).</p>
</div>
<div class="section">
<h1><a id="authors" name="authors">Authors</a></h1>
<p>Stefan Schwarzer &lt;<a class="reference" href="mailto:sschwarzer&#64;sschwarzer.net">sschwarzer&#64;sschwarzer.net</a>&gt;</p>
<p>Evan Prodromou &lt;<a class="reference" href="mailto:evan&#64;bad.dynu.ca">evan&#64;bad.dynu.ca</a>&gt; (lrucache module)</p>
<p>Please provide feedback! It's surely appreciated. :-)</p>
</div>
</div>
</body>
</html>
